将日文字符保存到 MySQL
Posted
技术标签:
【中文标题】将日文字符保存到 MySQL【英文标题】:Save Japanese characters into MySQL 【发布时间】:2019-05-16 14:53:48 【问题描述】:我正在使用 php 执行带有西班牙语、英语和日语字符的 mysql 更新语句。
但我无法将日文字符保存到数据库中。我应该如何进行?
数据库有 utf8_general_ci 排序规则。
$strSQL = "UPDATE table SET value = '" . addslashes($strValue) . "'";
$strSQL = utf8_decode($strSQL);
mysqli_query($cnn, $strSQL);
使用addslashes
,我可以将撇号保存到数据库中。
使用utf8_decode
,我可以将西班牙语字符保存到数据库中。
【问题讨论】:
你绝对不应该使用addslashes
,使用mysqli_real_escape_string
。你也不应该使用utf8_decode
,你需要确保你使用UTF-8作为你的数据库和页面编码。您可以在线 (phptherightway.com) 找到有关如何在 PHP 中使用 UTF-8 的信息
如果您在实施 Andrea 和 Max Base 建议的更改后仍然遇到问题,请查看 this 是否有帮助。
【参考方案1】:
为什么要处理utf8_decode()
sql 查询?
查看http://php.net/manual/en/function.utf8-decode.php了解有关utf8_decode()
的详细信息
你必须检查几件事。
您的数据库和表格或您的 PHP 脚本是否有问题。
数据库:
CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
表格字符集:
CREATE TABLE test.table
(
id INT NOT NULL AUTO_INCREMENT,
text VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM;
连接:
SET NAMES utf8;
例如:
$mysqli = new mysqli("localhost","my_user","my_password","test_db");
$mysqli->set_charset("utf8");
或
$link = mysqli_connect("localhost","my_user","my_password","test_db");
mysqli_set_charset($link,"utf8");
配置服务器的编码字符集:
使用 PHPMyAdmin ,登录时选择 UTF-8。
PHP 脚本:
header('Content-Type: text/html;charset=UTF-8');
Apache 配置(/etc/httpd/conf/httpd.conf):
AddDefaultCharset UTF-8
Apache .htaccess 文件:
AddCharset UTF-8 .htm
AddCharset UTF-8 .html
AddCharset UTF-8 .php
PHP 配置(/etc/php.ini):
default_charset = "utf-8"
MySQL 配置(/etc/my.cnf):
[client]
default-character-set=utf8
[mysqld]
default-collation=utf8_unicode_ci
character-set-server=utf8
default-character-set=utf8
init-connect='SET NAMES utf8'
character-set-client = utf8
用户价值观:
例如:
$_GET
,$_POST
您可以使用mb_convert_encoding()
将您的字符串转换为UTF-8。
有用的链接:
PHP inserting Japanese string to utf8 table as something else, but still reads it successfully
http://es2.php.net/manual/en/mysqli.set-charset.php
Select MySQL rows with Japanese characters
http://php.net/manual/en/function.mysql-set-charset.php
https://www.w3schools.com/php/func_mysqli_set_charset.asp
PHP mysql charset utf8 problems
https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434
https://dev.mysql.com/doc/refman/8.0/en/faqs-cjk.html
https://www.experts-exchange.com/questions/24742133/How-to-insert-a-japanese-character-into-mysql-database.html
【讨论】:
以上是关于将日文字符保存到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章