Maison > base de données > Oracle > 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
Libérer: 2023-04-18 15:32:47
original
2649 Les gens l'ont consulté

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';
Copier après la connexion

Le résultat est similaire à :

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET               ZHS16GBK
Copier après la connexion
Copier après la connexion
select * from nls_session_parameters where parameter like 'NLS%CHARACTERSET';
Copier après la connexion
Copier après la connexion

Le résultat est similaire à :

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET               AL32UTF8
Copier après la connexion

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
Copier après la connexion

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

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
Copier après la connexion

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

NLS_LANG = "ZHS16GBK"
NLS_NUMERIC_CHARACTERS = ",."
Copier après la connexion

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 = ",.")
Copier après la connexion

保存文件并关闭。

3.重新连接数据库

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

sqlplus / as sysdba
Copier après la connexion

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

select * from nls_session_parameters where parameter like 'NLS%CHARACTERSET';
Copier après la connexion
Copier après la connexion

输出类似于:

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_CHARACTERSET               ZHS16GBK
Copier après la connexion
Copier après la connexion

可以看到客户端的字符集已经成功修改为 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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal