我正在尝试保存数据库中的法语重音符号,但它们没有按照应有的方式保存在数据库中。
例如,“é”保存为“é”。
我尝试将文件设置为“Unicode (utf-8)”,数据库中的字段以及数据库本身都是“utf8_general_ci”。
当我使用Firebug查看通过AJAX提交的数据时,我看到重音符号以“é”传递,因此它是正确的。
谢谢,请让我知道如果您需要更多信息!
我正在尝试保存数据库中的法语重音符号,但它们没有按照应有的方式保存在数据库中。
例如,“é”保存为“é”。
我尝试将文件设置为“Unicode (utf-8)”,数据库中的字段以及数据库本身都是“utf8_general_ci”。
当我使用Firebug查看通过AJAX提交的数据时,我看到重音符号以“é”传递,因此它是正确的。
谢谢,请让我知道如果您需要更多信息!
在我的个人经验中,我通过在MySQL连接代码之后添加以下内容来解决了相同的问题:
个人而言,我通过在MySQL连接代码之后添加以下内容来解决相同的问题:
mysql_set_charset("utf8");
或者对于mysqli:
mysqli_set_charset($conn, "utf8");
或者使用mysqli面向对象的等效方法:
$conn->set_charset("utf8");
有时您需要通过添加以下代码来定义主PHP字符集:
mb_internal_encoding('UTF-8');
在客户端 HTML 端,您需要添加以下标头数据:
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
为了使用JSON AJAX结果(例如使用jQuery),您应该通过添加以下内容定义标头:
header("Content-type: application/json;charset=utf8");
json_encode(
some_data
);
这应该可以解决问题
尝试发送查询语句。
SET NAMES utf8;
连接成功后。
mysqli_set_charset($conn, "utf8");
如果您使用PDO,则必须像这样进行实例化:
new \PDO("mysql:host=$host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8') );
使用UTF8:
在你的HTML文件中设置标签:
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />
连接到MySQL数据库时,强制编码以避免操作MySQL设置。
$conn = mysql_connect('server', 'user', 'password') or die('Could not connect to mysql server.');
mysql_select_db('mydb') or die('Could not select database.');
mysql_set_charset('utf8',$conn); //THIS IS THE IMPORTANT PART
header('Content-type: text/html; charset=utf-8');
您是否已经查看了http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html:
需要使用Unicode与服务器通信的客户端应相应地设置客户端字符集;例如,通过发出SET NAMES 'utf8'语句。 ucs2不能用作客户端字符集,这意味着它不能用于SET NAMES或SET CHARACTER SET。(请参见第9.1.4节“连接字符集和排序规则”。)
除此之外:
如果您通过PHP从MySQL数据库获取数据(一切都是UTF-8),但在浏览器中仍然对某些特殊字符显示“?”,请尝试以下操作:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
哦,还有别忘了 C 语言,在连接数据库时,请确保您实际上使用了正确的字符集,方法是执行 SET NAMES charset=utf8(可能不是正确的语法,我得查一下该怎么写,但大致就是这样)
PHP(.net)建议不要在连接MySQL后使用类似于SET NAMES utf8这样的查询来设置字符集,因为您在MySQL语句内部转义数据的功能可能无法按预期工作。
如果您正在使用PHP,不要使用SET NAMES utf8,而是使用适当的..._set_charset()函数(或方法)。
$db = new PDO("database", "username", "pass", array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'))
。这将设置数据库连接为UTF-8编码。 - Junior Mayhémysqli_set_charset("utf8")
需要两个参数:连接和字符集,所以最终格式应该是mysqli_set_charset($conn, "utf8")
。请注意,这里只翻译原文,不包括任何解释或其他内容。 - Arnau Lacambra