Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli insert不会插入所有文本_Php_Mysql_Mysqli_Utf 8_Localization - Fatal编程技术网

Php mysqli insert不会插入所有文本

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_

我试图使用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_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编码(除非使用准备好的语句)。不完全正确。请看一下我添加的链接,以及该链接和相关功能的手册页面。不过,我不完全确定它是否适用于你的情况。