数据库准备语句中的汉字
Chinese characters in database prepared statement
我可能有一个简单的编码问题,但我想不通。
我在 MySQL 数据库中有可以是英文或中文的地址,所以我使用了 utf8_unicode_ci 。我从数据库中检索我的汉字没有问题,但我不能在准备好的请求中使用汉字。
我解释一下:
如果我输入
$bdd= new PDO('mysql:host=localhost:3306; dbname=****;charset=utf8', 'root', '');
$list_business = $bdd->query('SELECT * FROM business WHERE address LIKE N\'台灣台南市\' ');
$nb_business=$list_business->rowCount();
我会得到一个结果,因为其中一个地址包含“台湾台南市”
但是如果我尝试使用准备好的请求:
$list_business = $bdd->prepare('SELECT * FROM business WHERE address LIKE ? ');
$list_business->execute(array('%'.$_POST['address'].'%'));
$nb_business=$list_business->rowCount();
如果$_POST['address']是英文的就可以,中文的就不行:p
编辑:
如果我回显 $_POST['address'] 它会显示我输入的中文地址,所以这部分没问题,但是,如果我从数据库中回显地址,它将看起来像这样:“701\u53f0\u7063\u53f0\u5357\u5e02\u6771\u5340\u88d5\u8c50\u885775\u865f".
编辑 2:
当要求像 'char%' 这样的显示变量时;我得到了这个结果
character_set_clientutf8mb4
character_set_connection utf8mb4
character_set_database latin1
character_set_filesystem二进制
character_set_resultsutf8mb4
character_set_server latin1
character_set_systemutf8
character_sets_dir c:\wamp\bin\mysql\mysql5.6.17\share\charsets\
求求你帮忙!
先谢谢了,
Q
尝试设置页面本身的字符集(如果您还没有设置的话)。
header('Content-Type: text/html; charset=utf-8');
你的语言环境设置成"UTF-8"了吗?
您是否将 mysql 字符集设置为 utf-8?
在 mysql 中,exec "显示像 '%char%' 这样的变量;它应该 return
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
事实证明,在我用来测试 php 文件的表单上,除浏览器本身外,编码在任何地方都是正确的。我不明白为什么 Google Chrome 会将其编码为欧洲语言,尽管我将 html 文件保存为 UTF-8。
总之,问题解决了。谢谢你们的帮助,伙计们=)
我可能有一个简单的编码问题,但我想不通。 我在 MySQL 数据库中有可以是英文或中文的地址,所以我使用了 utf8_unicode_ci 。我从数据库中检索我的汉字没有问题,但我不能在准备好的请求中使用汉字。
我解释一下: 如果我输入
$bdd= new PDO('mysql:host=localhost:3306; dbname=****;charset=utf8', 'root', '');
$list_business = $bdd->query('SELECT * FROM business WHERE address LIKE N\'台灣台南市\' ');
$nb_business=$list_business->rowCount();
我会得到一个结果,因为其中一个地址包含“台湾台南市” 但是如果我尝试使用准备好的请求:
$list_business = $bdd->prepare('SELECT * FROM business WHERE address LIKE ? ');
$list_business->execute(array('%'.$_POST['address'].'%'));
$nb_business=$list_business->rowCount();
如果$_POST['address']是英文的就可以,中文的就不行:p
编辑:
如果我回显 $_POST['address'] 它会显示我输入的中文地址,所以这部分没问题,但是,如果我从数据库中回显地址,它将看起来像这样:“701\u53f0\u7063\u53f0\u5357\u5e02\u6771\u5340\u88d5\u8c50\u885775\u865f".
编辑 2:
当要求像 'char%' 这样的显示变量时;我得到了这个结果
character_set_clientutf8mb4
character_set_connection utf8mb4
character_set_database latin1
character_set_filesystem二进制
character_set_resultsutf8mb4
character_set_server latin1
character_set_systemutf8
character_sets_dir c:\wamp\bin\mysql\mysql5.6.17\share\charsets\
求求你帮忙!
先谢谢了,
Q
尝试设置页面本身的字符集(如果您还没有设置的话)。
header('Content-Type: text/html; charset=utf-8');
你的语言环境设置成"UTF-8"了吗? 您是否将 mysql 字符集设置为 utf-8? 在 mysql 中,exec "显示像 '%char%' 这样的变量;它应该 return
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
事实证明,在我用来测试 php 文件的表单上,除浏览器本身外,编码在任何地方都是正确的。我不明白为什么 Google Chrome 会将其编码为欧洲语言,尽管我将 html 文件保存为 UTF-8。 总之,问题解决了。谢谢你们的帮助,伙计们=)