php - mysql 土耳其语字符编码

标签 php mysql character-encoding turkey-test

我正在尝试将单词列表保存到我的数据库中。 Wordlist是一个采用utf-8编码的文本文档。这是我的表结构;

CREATE TABLE IF NOT EXISTS `wordlist` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `kelime` char(64) COLLATE utf8_turkish_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `kelime` (`kelime`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=1140209 ;

这是添加单词的 php 代码;

<?php
ini_set('max_execution_time', 3000);
$handle = @fopen("wordlist.txt", "r");

if ($handle) {
    include("ekle.php"); // makes db connection
    $sql = "insert into wordlist (kelime) VALUES (?)";
    $dbh->beginTransaction();
    $sth = $dbh->prepare($sql);
    while (($buffer = fgets($handle, 4096)) !== false) {
        $sth->execute(array(trim($buffer)));
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
        $dbh->rollBack();
    } else {
        $dbh->commit();
    }
    fclose($handle);
}?>

我的数据库的默认排序规则也是 utf-8_turkish_ci。当我添加单词时,我的单词列表在 phpmyadmin 上看起来不正确; enter image description here

我在这里做错了什么?

最佳答案

根据我过去的经验,我已经遇到过这个问题,并通过以下步骤解决了,

第 1 步: 在 HEAD 部分将字符集设置为 UTF-8

首先,浏览器需要知道您要在该页面中显示或使用 Unicode。因此,转到您的部分并将字符集设置为 utf-8。这样,浏览器就能够顺利地显示 Unicode 文本,没有任何错误。您还可以复制并粘贴以下行:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

第 2 步: 创建数据库

当您创建 (a) 数据库和 (b) 数据库中的任何表时,将它们的排序规则设置为 utf8_unicode_ci,您知道如果您使用 phpMyAdmin,这非常容易。

第 3 步:数据库初始化

初始化数据库连接时,请添加“额外行”

<?php

    define('HOSTNAME', 'localhost');
    define('USERNAME', 'database_user_name');
    define('PASSWORD', 'database_password');
    define('DATABASE', 'database_name');

    $dbLink = mysql_connect(HOSTNAME, USERNAME, PASSWORD);
    mysql_query("SET character_set_results=utf8", $dbLink);
    mb_language('uni'); 
    mb_internal_encoding('UTF-8');
    mysql_select_db(DATABASE, $dbLink);
    mysql_query("set names 'utf8'",$dbLink);

?>

但是为什么要添加额外的行呢?因为您让数据库知道您很快将使用哪种输入。

第 4 步: 在数据库中插入输入/数据

<?php

    mysql_query("SET character_set_client=utf8", $dbLink);
    mysql_query("SET character_set_connection=utf8", $dbLink);

    $sql_query = "INSERT INTO
    TABLE_NAME(field_name_one, field_name_two)
    VALUES('field_value_one', 'field_value_two')";
    mysql_query($sql_query, $dbLink);

?>

为什么要添加前两行?因为数据库应该知道要存储什么样的数据。

第 5 步:更新数据库中的输入/数据

<?php

    mysql_query("SET character_set_client=utf8", $dbLink);
    mysql_query("SET character_set_connection=utf8", $dbLink);

    $sql_query = "UPDATE TABLE_NAME
    SET field_name_one='field_value_one', field_name_two='field_value_two'
    WHERE id='$id'; ";
    mysql_query($sql_query, $dbLink);

?>

因此,在使用 Unicode 时,您需要在运行查询字符串之前添加额外的两行。

第 6 步:从数据库中搜索数据

<?php

    mysql_query("SET character_set_results=utf8", $dbLink);

    $sql_query = "SELECT * FROM TABLE_NAME WHERE id='$id'; ";
    $dbResult = mysql_query( $sql_query, $dbLink);

?>

每次搜索 Unicode 数据时添加一行就足够了。

你就快完成了。

我认为这可以帮助您解决问题。

关于php - mysql 土耳其语字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175327/

相关文章:

php - 基于 PS_SHOP_DOMAIN 使用序列 key 保护源代码

python - 使用 python 将许多变量附加到 MySQL

php - 是否有更有效的方法来创建年/月列表?

mySQL 与具有共同属性的组的所有成员的多对多关系

mysql - 在 mysql 中的 BETWEEN 之后/之前使用 AND 或 OR 函数

powershell忽略来自不同进程的输出的字符转义

java - 如何在html中呈现特殊字符

java - HTTP组件编码问题

php - 使用 PHP (Foreach) 连接两个不同服务器中的两个表

php - 将 php 循环转换为简单的 MySQL 查询