115

我昨天提出的一个问题的回答之一建议我应该确保我的数据库可以正确处理 UTF-8 字符。我怎么能用 MySQL 做到这一点?

4

14 回答 14

102

更新:

简短的回答 - 您应该几乎总是使用utf8mb4字符集和utf8mb4_unicode_ci排序规则。

要更改数据库:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

看:

原答案:

MySQL 4.1 及更高版本有一个默认的 UTF-8 字符集。您可以在my.cnf文件中验证这一点,记住设置客户端服务器(default-character-setcharacter-set-server)。

如果您有想要转换为 UTF-8 的现有数据,请转储您的数据库,然后将其导入为 UTF-8,确保:

  • SET NAMES utf8在查询/插入数据库之前使用
  • DEFAULT CHARSET=utf8创建新表时使用
  • 此时,您的 MySQL 客户端和服务器应该是 UTF-8(请参阅 参考资料my.cnf)。请记住,您使用的任何语言(例如 PHP)也必须是 UTF-8。某些版本的 PHP 将使用他们自己的 MySQL 客户端库,它可能不支持 UTF-8。

如果您确实要迁移现有数据,请记住先备份!当事情没有按计划进行时,可能会发生很多奇怪的数据截断!

一些资源:

于 2008-10-14T18:21:03.190 回答
47

为了使这个“永久”,在my.cnf

[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8

要检查,请转到客户端并显示一些变量:

SHOW VARIABLES LIKE 'character_set%';

验证它们都是utf8,除了..._filesystem,应该是binaryand ..._dir,它指向 MySQL 安装中的某个位置。

于 2008-10-14T18:30:19.597 回答
33

MySQL 4.1 及更高版本有一个它调用的默认字符集,utf8但它实际上只是 UTF-8 的一个子集(只允许三字节或更小的字符)。

utf8mb4如果您想要“完整”UTF-8,请用作您的字符集。

于 2015-04-28T20:51:10.933 回答
21

简短的回答:utf8mb4在 4 个地方使用:

  • 您客户端中的字节是 utf8,而不是 latin1/cp1251/等。
  • SET NAMES utf8mb4或建立客户端与 MySQL 的连接时的等效项
  • CHARACTER SET utf8mb4在所有表/列上——除了严格为 ascii/hex/country_code/zip_code/etc 的列。
  • <meta charset charset=UTF-8>如果您要输出到 HTML。(是的,这里的拼写不同。)

更多信息
一路UTF8

上述链接提供了“解决所有问题需要详细的规范答案”。-- 本论坛有空间限制。

编辑

除了CHARACTER SET utf8mb4包含“所有”世界的字符之外,COLLATION utf8mb4_unicode_520_ci还可以使用“最佳全能”排序规则。(对于那些想要这些语言的细微差别的人来说,还有土耳其语、西班牙语等排序规则。)

于 2016-01-20T01:26:23.857 回答
4

字符集是数据库(默认)和表的属性。你可以看看(MySQL命令):

show create database foo; 
> CREATE DATABASE  `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */

show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1

换句话说; 检查您的数据库字符集或更改它很容易:

ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
于 2008-10-14T18:32:39.907 回答
3

我遵循了哈维尔的解决方案,但我在 my.cnf 中添加了一些不同的行:

[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8 

我在这里找到了这个想法:http: //dev.mysql.com/doc/refman/5.0/en/charset-server.html在页面底部的第一个/唯一用户评论中。他提到跳过字符集客户端握手具有一定的重要性。

于 2012-05-20T12:14:19.900 回答
3

要将数据库本身的字符集编码更改为 UTF-8,请在 mysql> 提示符下键入以下命令。USE ALTER DATABASE.. 将 DBNAME 替换为数据库名称:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

这是这个问题的副本如何将整个 MySQL 数据库字符集和排序规则转换为 UTF-8?

于 2016-01-25T07:14:19.303 回答
0

将您的设置database collationUTF-8 然后应用table collation到数据库默认值。

于 2016-01-25T08:01:34.123 回答
-1

您的答案是您可以通过 MySql 设置进行配置。在我的回答中可能有些断章取义,但这也知道对您有帮助。
如何配置Character SetCollation

对于使用默认 MySQL 字符集和排序规则 ( ) 存储数据的应用程序latin1, latin1_swedish_ci,不需要特殊配置。如果应用程序需要使用不同的字符集或排序规则存储数据,您可以通过多种方式配置字符集信息:

  • 指定每个数据库的字符设置。例如,使用一个数据库utf8的应用程序可能需要 sjis,而使用另一个数据库的应用程序可能需要 sjis。
  • 在服务器启动时指定字符设置。这会导致服务器将给定的设置用于不进行其他安排的所有应用程序。
  • 如果您从源代码构建 MySQL,请在配置时指定字符设置。这会导致服务器对所有应用程序使用给定的设置,而无需在服务器启动时指定它们。

此处显示的示例为您设置 utf8 字符集的问题,此处还设置了排序规则以获得更多帮助(utf8_general_ci排序规则`)。

指定每个数据库的字符设置

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

在服务器启动时指定字符设置

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

在 MySQL 配置时指定字符设置

shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

要查看适用于您的连接的字符集和排序规则系统变量的值,请使用以下语句:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

这可能是一个冗长的答案,但有办法,你可以使用。希望我的回答对你有所帮助。更多信息http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html

于 2016-01-20T06:04:45.443 回答
-1

这对我有用:

mysqli_query($connection, "SET NAMES 'utf8'");

于 2021-08-14T10:41:26.880 回答
-2

与 UTF-8 的数据库连接

$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());
于 2016-04-14T07:22:33.750 回答
-3

SET NAMES UTF8

这是诀窍

于 2008-10-14T18:21:46.277 回答
-3

将数据库连接设置为 UTF8:

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }
于 2013-08-12T21:44:49.613 回答
-3

能够找到解决方案。按照http://technoguider.com/2015/05/utf8-set-up-in-mysql/的规定运行以下内容

SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;
于 2015-06-09T07:41:27.710 回答