在哪里定义MySQL字符集

时间:2012-03-22 20:43:34

标签: php mysql character-encoding

我即将创建一个包含支持多语言的数据库的项目,所以我决定使用UTF-8编码。

但我不知道在哪里定义编码。通过网络浏览,特别是在这个论坛中,我发现了一些提示,但我仍然遗漏了一些基础知识。

有许多级别可以定义字符集:

  • OS wide
  • MySQL wide:在MySQL-INI文件和php.ini文件中,
  • 表示数据库:在create语句中
  • 表:在create语句中,
  • 表示列:在create语句中
  • 连接到mysql:使用--default-character-set = UTF8开关

我不清楚这个开关究竟设置了什么

  • 是受影响的新创建的表的文本列,或
  • 是检索文本数据时进行的转换吗?
  • 或其他什么?
  • 如果在my.ini,现有数据库或现有表中使用default-character-set = UTF8,
  • 是否必要?

Q1:我需要澄清一下。

在mysql中,存在很多设置字符集的方法:

  • 设置字符集
  • 设置character_set_client
  • 设置character_set_results
  • 设置character_set_connection
  • 设置名称

Q2:如果数据库字符集或表字符集已正确定义 - 我是否需要上述命令?      - 他们是否正在取代上面的启动选项?或者它们是否用于改进开关?

更多问题:

  1. 如果在MySQL-INI文件中定义了字符集(如utf8),是否需要使用上述命令和开关之一?

  2. 如果没有定义字符集或者utf8以外的字符集(可能我无法控制它),是否足以使用utf8编码创建数据库?并省略create和connect语句中的任何字符集切换?

  3. 如果数据库无法定义字符集,是否足以为表设置它,或者我是否必须为每个char / varchar / text字段定义它?

  4. 我见过像这样的create table语句(NetBeans示例项目'TodoList'):

    CREATE TABLE `todo` (
        ...
        `title` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
        `description` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
        `comment` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
        `status` ENUM('PENDING', 'DONE', 'VOIDED') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'PENDING',
        ...
    ) ENGINE = MYISAM DEFAULT CHARSET=utf8;
    

    问题6:CHARSET是为表格和文本字段定义的 - 这不是多余的吗?

    感谢您的任何澄清。

1 个答案:

答案 0 :(得分:0)

Q1 - 使用以下命令结束连接脚本:mysql_query(“SET NAMES utf8”);
Q2 - 是的。如果您不使用此设置,则可以根据托管(php ini)的设置进行输出,其中可以设置默认字符编码。
Q3 - 没有。表的默认字符集,字段可以有自己的或通常是狭窄的规范(排序的语言差异等)。