Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在哪里定义MySQL字符集_Php_Mysql_Character Encoding - Fatal编程技术网

Php 在哪里定义MySQL字符集

Php 在哪里定义MySQL字符集,php,mysql,character-encoding,Php,Mysql,Character Encoding,我将要创建一个包含多语言支持的数据库的项目,所以我决定使用UTF-8编码 但我不确定在哪里定义编码。通过网络浏览,特别是在这个论坛上,我发现了一些提示,但我仍然错过了一些基础知识 可以在多个级别上定义字符集: 全操作系统 MySQL范围:在MySQL INI文件和php.INI文件中 对于数据库:在create语句中 对于表:在create语句中 对于列:在create语句中 到mysql的连接:使用--default character set=UTF8开关 我不清楚这个开关到底设置了什么

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

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

可以在多个级别上定义字符集:

  • 全操作系统
  • MySQL范围:在MySQL INI文件和php.INI文件中
  • 对于数据库:在create语句中
  • 对于表:在create语句中
  • 对于列:在create语句中
  • 到mysql的连接:使用--default character set=UTF8开关
我不清楚这个开关到底设置了什么

  • 新创建的表的文本列是否受到影响,或者
  • 在检索文本数据时是否进行了转换
  • 还是别的什么
  • 如果在my.ini、现有数据库或现有表中使用默认字符集=UTF8,是否有必要这样做
问题1:我需要澄清一下

在mysql中,有许多方法可以设置字符集:

  • 集合字符集
  • 设置字符集\u设置\u客户端
  • 设置字符集\u设置\u结果
  • 设置字符集连接
  • 定名
问题2:如果数据库字符集或表格字符集定义正确,是否需要上述命令? -他们正在替换上面的启动选项吗?或者它们是用来改进开关的

更多问题:

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

  • 如果字符集未定义或不是utf8(可能我无法控制它),那么使用utf8编码创建数据库就足够了吗?并省略create和connect语句中的任何字符集开关

  • 如果无法为数据库定义字符集,那么为表设置字符集就足够了,还是必须为每个char/varchar/text字段定义字符集

  • 我见过这样的create table语句(NetBeans示例项目“TodoList”):

    Q6:字符集是为表和文本字段定义的,这不是多余的吗


    感谢您的澄清。

    Q1-使用以下命令结束您的连接脚本:mysql\u查询(“设置名称utf8”)
    问题2-是的。如果不使用此设置,则可以根据主机(php ini)的设置作为输出,其中可以设置默认字符编码。

    Q3-否。表、字段的默认字符集可以有自己的,或者通常使用狭窄的规范(排序的语言差异等)。

    Q1-使用以下命令结束连接脚本:mysql_query(“SET NAMES utf8”)
    问题2-是的。如果不使用此设置,则可以根据主机(php ini)的设置作为输出,其中可以设置默认字符编码。

    Q3-否。表、字段的默认字符集可以有自己的,或者通常使用狭窄的规范(排序的语言差异等)。

    您好,Jirka,谢谢您回答我的问题。我发现,没有必要为每个级别设置字符集和排序规则。一旦为数据库定义了字符集,就会按预期创建表和字段。因此,我将在我的项目中:1。使用utf8字符集2创建数据库。根据需要定义字段或表的排序规则。3.使用mysql_query(“SET NAMES‘utf8’”)确保在数据从数据库4传输到数据库4时不进行任何转换。使用php utf8字符串方法可以做到这一点。@Gisela:您应该接受Jirka的答案,或者将您的评论作为单独的答案发布。让未来的读者更容易找到解决方案。你好,吉尔卡,谢谢你回答我的问题。我发现,没有必要为每个级别设置字符集和排序规则。一旦为数据库定义了字符集,就会按预期创建表和字段。因此,我将在我的项目中:1。使用utf8字符集2创建数据库。根据需要定义字段或表的排序规则。3.使用mysql_query(“SET NAMES‘utf8’”)确保在数据从数据库4传输到数据库4时不进行任何转换。使用php utf8字符串方法可以做到这一点。@Gisela:您应该接受Jirka的答案,或者将您的评论作为单独的答案发布。使未来的读者更容易找到解决方案。
    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;