2013-08-06 2 views
0

Я просто новичок в mysql.mysql следует использовать char для unicode?

Я хочу, чтобы объявить свою таблицу что-то вроде этого,

CREATE TABLE `test` (
     `NO` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
     `ID` char(50) CHARACTER SET utf8 NOT NULL , 
     `FIRST_NAME` char(50)CHARACTER SET utf8 NOT NULL, 
     `LAST_NAME` smallint(50)char(50)CHARACTER SET utf8 NOT NULL, 
     PRIMARY KEY (`NO`), 
    ) 

Я прочитал в MySQL о полукоксе и VARCHAR, что

The length of a CHAR column is fixed to the length that you declare when you create the table. 

Мой вопрос заключается в том, что если я использую Юникод символ (50) для китайский, японский, корейский или другие символы юникода, будут ли эти столбцы использовать слишком много хранилищ в базе данных и могут повлиять на производительность?

Для английских символов он может принимать до 50 символов, если я объявляю свой стол таким образом?

Есть ли лучший способ или полезно использовать char (100) для unicode?

Исправьте меня, если я ошибаюсь.

ответ

1

Согласно MySQL manual, количество байтов, требуемых в CHAR(M) столбце М х ш, где ш является «число байтов, необходимых для символа максимальной длины в наборе символов». Это наводит на мысль, что столбец CHAR(50) будет хранить 50 символов, а не 50 байт. Если ваши персонажи будут китайскими и т. Д., Он все равно сохранит до 50 из них. Обратите внимание, что VARCHAR(50) также сохранит до 50 символов, но будет (если игнорировать накладные расходы 1-2 байт, которые поставляются с столбцом VARCHAR) занимают меньше места хранения, чем столбец CHAR(50), если хранится менее 50 символов.

EDIT Это применимо только в том случае, если вы используете MySQL 5.5 или новее. Более ранние версии интерпретировали длину символьных и текстовых полей как байтов, а не символов.

+0

так что я могу использовать varchar для символа Unicode? – Raymond

+0

@ Раймонд - Абсолютно. Кстати, чтобы сохранить ввод текста, я считаю, что вы можете просто установить «ХАРАКТЕР SET» для всей таблицы, а не для столбца сочной строки. –

+0

'DEFAULT CHARSET = latin1' что-то вроде этого в инструкции create table? – Raymond

Смежные вопросы