Maison  >  Article  >  base de données  >  Analyser et résoudre le problème des caractères chinois tronqués dans Oracle sous Linux

Analyser et résoudre le problème des caractères chinois tronqués dans Oracle sous Linux

PHPz
PHPzoriginal
2023-04-18 15:23:352590parcourir

Lors de l'utilisation de la base de données Oracle sous le système Linux, un problème de caractères chinois tronqués peut survenir, principalement dû à des paramètres de jeu de caractères incorrects. Cet article explique comment résoudre le problème des caractères chinois tronqués dans la base de données Oracle sous le système Linux.

1. Problème

Lors de l'utilisation de la base de données Oracle sous le système Linux, un problème de caractères chinois tronqués peut survenir. Les caractères tronqués sont généralement affichés sous la forme de caractères méconnaissables ou sous forme d'espaces réservés tels que des carrés ou des points d'interrogation.

2. Cause du problème

Le jeu de caractères de la base de données Oracle comprend deux aspects : le jeu de caractères de la base de données et le jeu de caractères du client. Lorsque le jeu de caractères du client n'est pas cohérent avec le jeu de caractères de la base de données, les caractères chinois seront tronqués. Lors de l'installation de la base de données Oracle sous un système Linux, vous devez définir le jeu de caractères correct, sinon le problème des caractères chinois tronqués se produira facilement.

3. Solution

1. Interroger le jeu de caractères de la base de données et du client

Nous pouvons utiliser les deux commandes suivantes pour interroger respectivement le jeu de caractères de la base de données actuelle et du client :

select * from nls_database_parameters where parameter like 'NLS%CHARACTERSET';

Le résultat est similaire à :

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET               ZHS16GBK
select * from nls_session_parameters where parameter like 'NLS%CHARACTERSET';

Le résultat est similaire à :

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET               AL32UTF8

Nous pouvons constater que le jeu de caractères de la base de données actuelle est ZHS16GBK, tandis que le jeu de caractères du client est AL32UTF8. C'est la raison pour laquelle les caractères chinois sont tronqués. ZHS16GBK,而客户端的字符集为 AL32UTF8,这就是中文字符乱码的原因。

2.修改客户端字符集

我们可以通过修改客户端的字符集,将其与数据库的字符集保持一致,从而解决中文字符乱码的问题。

首先我们需要编辑客户端的 tnsnames.ora 文件,该文件位于 $ORACLE_HOME/network/admin 目录下。我们可以使用以下命令来打开该文件:

vi $ORACLE_HOME/network/admin/tnsnames.ora

在打开的文件中找到客户端的连接信息,例如:

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

然后在该连接信息中添加以下两行:

NLS_LANG = "ZHS16GBK"
NLS_NUMERIC_CHARACTERS = ",."

NLS_LANG 表示当前客户端的字符集,该值确定客户端与服务器交换数据的字符集。NLS_NUMERIC_CHARACTERS 表示数字字符的格式,默认情况下为 .,,在一些特殊情况下需要修改此参数。

最终修改后的连接信息可能类似于:

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
  (NLS_LANG = "ZHS16GBK")
  (NLS_NUMERIC_CHARACTERS = ",.")

保存文件并关闭。

3.重新连接数据库

修改客户端字符集后,我们需要重新连接数据库,使其生效。可以使用以下命令重新连接数据库:

sqlplus / as sysdba

输入密码后连接到数据库,然后再次查询客户端的字符集:

select * from nls_session_parameters where parameter like 'NLS%CHARACTERSET';

输出类似于:

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET               ZHS16GBK

可以看到客户端的字符集已经成功修改为 ZHS16GBK

2. Modifier le jeu de caractères du client

Nous pouvons résoudre le problème des caractères chinois tronqués en modifiant le jeu de caractères du client pour le rendre cohérent avec le jeu de caractères de la base de données.

Nous devons d'abord éditer le fichier tnsnames.ora du client, qui se trouve dans le répertoire $ORACLE_HOME/network/admin. On peut utiliser la commande suivante pour ouvrir le fichier : 🎜rrreee🎜 Retrouver les informations de connexion du client dans le fichier ouvert, par exemple : 🎜rrreee🎜 Ajoutez ensuite les deux lignes suivantes aux informations de connexion : 🎜rrreee🎜NLS_LANG code > Indique le jeu de caractères du client actuel. Cette valeur détermine le jeu de caractères des données échangées entre le client et le serveur. <code>NLS_NUMERIC_CHARACTERS représente le format des caractères numériques. Par défaut, il s'agit de .,. Ce paramètre doit être modifié dans certains cas particuliers. 🎜🎜Les informations de connexion finales modifiées peuvent ressembler à : 🎜rrreee🎜Enregistrez le fichier et fermez. 🎜🎜3. Reconnectez-vous à la base de données 🎜🎜Après avoir modifié le jeu de caractères client, nous devons nous reconnecter à la base de données pour la rendre efficace. Vous pouvez utiliser la commande suivante pour vous reconnecter à la base de données : 🎜rrreee🎜Entrez le mot de passe pour vous connecter à la base de données, puis interrogez à nouveau le jeu de caractères du client : 🎜rrreee🎜Le résultat est similaire à : 🎜rrreee🎜Vous pouvez voir que le le jeu de caractères du client a été modifié avec succès en ZHS16GBK, de sorte que le problème des caractères chinois tronqués soit résolu. 🎜🎜4. Résumé🎜🎜Lors de l'utilisation de la base de données Oracle sous le système Linux, les caractères chinois tronqués sont un problème courant. Cela est principalement dû à l'incohérence entre le jeu de caractères du client et celui de la base de données. En modifiant le jeu de caractères du client, nous pouvons résoudre le problème des caractères chinois tronqués. Voici les étapes spécifiques pour résoudre le problème des caractères chinois tronqués dans la base de données Oracle sous le système Linux. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn