2012-11-15 21 views
22

Olası Çoğalt: Eğer wikipedia kullanımı varbinary görebileceğiniz gibineden yerine varchar değişken ikili

http://www.mediawiki.org/wiki/Manual:Logging_table

: Bu tablodan bir göz atın lütfen
What is the advantage of using varbinary over varchar here?

varchar yerine:

| log_type  | **varbinary**(32)  | NO | MUL |    | 
| log_action | **varbinary**(32)  | NO |  |    | 
| log_timestamp | **binary**(14)   | NO | MUL | 19700101000000 | 
| log_user  | int(10) unsigned  | NO | MUL | 0    | 
| log_user_text | **varbinary**(255)  |  |  |    | 

bu bilgilerin tümüöyleyse neden onlara ikili olarak kaydetmek, metin vardır?

Hepsi tablolar için yapıyoruz. MSSQL yılında

+2

[İşte] (http: // stackoverflow.com/questions/5978484/what-is-the-avantaj-var-varbinary-over-varchar-burada) varchar hakkında daha az alan sonra varchar hakkında konuşur. – threenplusone

+0

@threenplusone - Bu belirli bir bulmaca bağlamında. '1.2.3 'dizgesini' 100000000011000000000210000000003' 'yerine her bileşenin bir int uzunluğuna kaydırmak yerine, daha kompakt bir ikili gösterim kullandığını' 0x020000000102000000020200000003' –

+0

@MartinSmith haklısınız, bunun için üzgünüz. Tam olarak okumadığım için aldığım şey bu. – threenplusone

cevap

12

Mediawiki early 2011 içinde değişken ikili varchar değiştirildi:

Savaş varchar üzerinde. Varchar (N) ve varchar (N) ikili varyantına (N) ait tüm oluşumlar değiştirildi. varchars, belirli yapılandırmalarla MySQL veritabanlarında, " harmanlama hatalarının" geçersiz bir şekilde karıştırılmasına neden olur, çoğu özellikle varsayılan MySQL yapılandırmasıdır.

+0

Ben harmanlama bunun için bir neden olduğunu düşünüyorum :) + 1 Media Media neden değişiklik yaptıkları için iyi bir cevaptır. –

+11

Onlar yanlış tarafta sorunu tespit gibi görünüyor. Altta yatan alfabe sorununu düzeltmek yerine semptomu susturdular. – usr

+0

extact awnser için teşekkürler – user1411084

5

:

Ben büyük fark sadece arasındaki nvarchar ve varbinary olduğunu düşünüyorum.

nvarchar için depolar yerine 1 bayt, her karakter 2 bayt.

varcharvarbinary aynı yapar: MSDN'den:

depolama büyüklüğü + 2 bayt" her ikisi için girilen verilerin gerçek uzunluğu

burada fark varbinary gereğidir. girilen veriler uzunluğunda 0 bayt olabilir. Burada

küçük eksa olduğunu mple: Orada 7

Yani boyut olarak aynı oldukları, AMA - - 19 ve 7

SELECT datalength(TextData), datalength(binaryData) FROM test 

sonuç 19 ise:

CREATE TABLE Test (textData varchar(255), binaryData varbinary(255)) 

INSERT INTO Test 
VALUES('This is an example.', CONVERT(varbinary(255),'This is an example.',0)) 
INSERT INTO Test 
VALUES('ÜŰÚÁÉÍä', CONVERT(varbinary(255),'ÜŰÚÁÉÍä',0)) 

Burada ne kullanabilirsiniz DATALENGTH işlevdir başka bir fark. Sütun özelliklerini kontrol ederseniz, varbinarın (elbette) harmanlama ve karakter kümesi olmadığını, böylece farklı türde kodlama ve karakter kümesinin değerlerinin kolayca kullanılmasına yardımcı olabileceğini görebilirsiniz.

SELECT 
    * 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_NAME = 'Test' 
ORDER BY 
    ORDINAL_POSITION ASC; 
İlgili konular