Php mysqli insert不会插入所有文本
我试图使用mysqli命令在mysql数据库中插入一些名称。问题是,每当土耳其字符u出现在文本中时,数据库中的文本就会变成该字符的前一部分 例如,我尝试插入:Humana仍然是Tee Anne SütünüArttıran Bitkiıayı 数据库中的文本:Humana仍然是Tee Anne S 数据库中的列是一个文本列,具有utf-8通用\u ci标准 这是我用来插入的代码Php mysqli insert不会插入所有文本,php,mysql,mysqli,utf-8,localization,Php,Mysql,Mysqli,Utf 8,Localization,我试图使用mysqli命令在mysql数据库中插入一些名称。问题是,每当土耳其字符u出现在文本中时,数据库中的文本就会变成该字符的前一部分 例如,我尝试插入:Humana仍然是Tee Anne SütünüArttıran Bitkiıayı 数据库中的文本:Humana仍然是Tee Anne S 数据库中的列是一个文本列,具有utf-8通用\u ci标准 这是我用来插入的代码 function mysqli_connector() { $link = mysqli_connect(DB_
function mysqli_connector()
{
$link = mysqli_connect(DB_HOSTNAME,DB_USERNAME,DB_PASSWORD,DB_DATABASE) or die("hata");
$link->set_charset("utf8");
mysqli_set_charset($link,"utf8");
return $link;
}
function oc_product_description($p_id,$name){
$link = mysqli_connector();
$link->query("insert into oc_product_description (product_id,name,language_id,meta_title)values('$p_id','$name','1','$name')")or die(mysqli_error($link));
mysqli_close($link);
}
oc_product_description(106,"Humana Still Tee Anne Sütünü Arttıran Bitki Çayı");
问题出现在我用其他土耳其语字符写的ü字母上,效果很好
谢谢您的时间。将fieldname的数据类型更改为“varchar”,并给出大小。。。。
然后您的字段看起来像“varchar(300)”使用Utf8截断的字符通常是由
- 客户使用拉丁字母1编码的重音字符,以及
在SET NAMES utf8
INSERT
字符集是什么并不重要;
问题发生在传输到服务器的过程中
例如,下面是插入é
的步骤:
- 客户机将
ee
编码为十六进制E9
,即拉丁1编码
- 传输到服务器时,
设置名称utf8
表示(错误)
“客户端中的字节编码为utf8”
- 但是没有utf8字符编码
E9
,
因此,字符串在E9
也就是说,字符串最多存储到,但不包括,
无效的编码
我已经谈到了utf8
和latin1
,但是很多(不是全部)
成对的字符集会遇到这种“截断”问题
无法从表中恢复数据
今后,解决办法是让这些人同意:
- 客户端中字符的编码
集合名称中声明的编码(或等效)
请注意,目标列的字符集是什么并不重要;
SET NAMES
的目的是在客户端拥有的数据之间进行转换
以及专栏的内容。但是,使用utf8mb4通常是好的
(或至少utf8)用于所有文本。尝试使用html编码进行插入和解码以供阅读。看看这是否有帮助:html编码是什么意思?只是把名字写在html标签上?@Maximus2012不,那完全错了。HTML编码不是这里使用的上下文,它是SQL,并且应该为SQL编码(除非使用准备好的语句)。不完全正确。请看一下我添加的链接,以及该链接和相关功能的手册页面。不过,我不完全确定它是否适用于你的情况。