0

我只是mysql的新手。

我想像这样声明我的表,

    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 中读到关于 char 和 varchar 的内容

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

我的问题是,如果我将 unicode char(50) 用于中文、日文、韩文或其他 unicode 字符,这些列会在数据库中使用太多存储空间并影响性能吗?

对于英文字符,如果我这样声明我的表格,它最多只能接受 50 个字符?

有没有更好的方法或者将 char(100) 用于 unicode?

如我错了请纠正我。

4

1 回答 1

1

根据MySQL 手册,一CHAR(M)列所需的字节数为M x w,其中w是“字符集中最大长度字符所需的字节数”。这清楚地表明一CHAR(50)列将存储 50 个字符,而不是 50 个字节。如果你的字符恰好是中文等,它仍然会存储多达 50 个字符。请注意, aVARCHAR(50)也将存储最多 50 个字符,但是(如果忽略列附带的 1-2 字节开销)当存储的字符少于 50 个时,将VARCHAR占用比列更少的存储空间。CHAR(50)

编辑这仅适用于您使用 MySQL 5.5 或更高版本的情况。早期版本将字符和文本字段的长度解释为字节,而不是字符。

于 2013-08-06T16:40:39.983 回答