31

この表を見てください:

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

あなたが見ることができるように、ウィキペディアは varchar の代わりに varbinary を使用します:

| 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)      |      |     |                |

これらの情報はすべてテキストであるのに、なぜバイナリとして保存するのでしょうか?

すべてのテーブルに対してこれを行います。

4

2 に答える 2

19

Mediawiki は2011 年初頭に varchar から varbinary に変更されました:

varchar との戦争。varchar(N) および varchar(N) バイナリの出現箇所をすべて varbinary(N) に変更しました。varchars は、特定の構成 (特にデフォルトの MySQL 構成) を持つ MySQL データベースで問題 (「照合の無効な組み合わせ」エラー) を引き起こします。

于 2012-11-15T12:20:01.033 に答える
7

MSSQL では:

nvarchar大きな違いはとの間だけだと思いますvarbinary

nvarchar各文字に 1 バイトではなく 2 バイトを格納するためです。

varcharと同じことを行いvarbinaryます: MSDN から:

どちらの場合も、格納サイズは入力されたデータの実際の長さ + 2 バイトです。

ここでの違いは、varbinary によるものです。入力されるデータの長さは 0 バイトにすることができます。

以下に小さな例を示します。

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))

ここで使用できるのは、DATALENGTH関数です。

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

結果は 19 - 19 と 7 - 7 です

サイズは同じですが、他にも違いがあります。列の仕様を確認すると、varbinary (もちろん) には照合順序と文字セットがないことがわかります。そのため、さまざまな種類のエンコーディングと文字セットの値を簡単に使用できます。

SELECT 
  *
FROM   
  INFORMATION_SCHEMA.COLUMNS 
WHERE   
  TABLE_NAME = 'Test' 
ORDER BY 
  ORDINAL_POSITION ASC; 
于 2012-11-15T08:55:23.057 に答える