2016-05-19 10 views
0

Ich bin neu in Java und ich versuche, ein einfaches Projekt zu tun, um sich damit vertraut zu machen.schreiben persische oder arabische Alphabete in Mysql

Also arbeite ich an einer dynamischen Webanwendung, die ich Tomcat als Server und MySQL mit Hibernate-Provider verwende.

Ich möchte persische oder arabische Alphabete in meine Tabellen schreiben können. aber leider kann ich nicht.

Ich habe diese Abfrage für meine Datenbanktabellen geschrieben:

DROP DATABASE IF EXISTS myDb; 
CREATE DATABASE myDb CHARSET = utf8 COLLATE = utf8_general_ci; 
USE myDb; 

drop table if exists user; 
drop table if exists resume; 


create table resume(
    resumeId INTEGER NOT NULL AUTO_INCREMENT, 
    resumeDescription NVARCHAR(255), 
    PRIMARY KEY (resumeId) 
) charset = utf8; 

create table user(
    userId INTEGER NOT NULL AUTO_INCREMENT, 
    username NVARCHAR(40) NOT NULL, 
    password varchar(20) NOT NULL, 
    email varchar(50) NOT NULL, 
    resumeId INTEGER UNIQUE, 
    PRIMARY KEY (userId), 
    FOREIGN KEY (resumeId) REFERENCES resume(resumeId) 
) charset = utf8; 

ich versucht habe, persisch Alphabete einzufügen. Ich habe ein Formular erstellt und ein Servlet für die Bearbeitung der Anfrage erstellt. Ich habe Parameter von der Anfrage und testete sie. In diesem Moment waren sie in Ordnung und sie wurden richtig gezeigt. aber wenn ich sie in der Datenbank einfügen Gesicht ich mit diesem:

(die Fragezeichen persisch Alphabete sind)

enter image description here

Ich weiß nicht, was zu tun ist und was ist das Problem. Ich habe nach diesem Problem im Internet gesucht und verschiedene Wege getestet, aber keiner von ihnen funktionierte in meinem Fall.

Kann mir bitte jemand helfen, persische Alphabete richtig in mySql-Datenbank zu schreiben?

durch die Art und Weise meine Verbindung url ist dies:

jdbc:mysql://localhost:3306/myDb?zeroDateTimeBehavior=convertToNull

+0

Können Sie bitte bestätigen, wo der Fehler passiert? Das '?' könnte Daten darstellen, die falsch in die Datenbank geschrieben wurden, oder es könnte einfach sein, dass das Programm das '?' ist nicht für das persische Alphabet konfiguriert. (Ich würde versuchen, manuell ein persisches Zeichen in die Datenbank einzufügen und zu sehen, wie das angezeigt wird) – HeavyE

+0

@HeavyE danke für deine Antwort. aber ich konnte nicht genau verstehen, was du meinst. Kannst du mehr erklären? – TTS

+0

In der Frage haben Sie ein Bild der Datenbankdaten mit einer Reihe von '?' S bereitgestellt. Ist es möglich, dass das Tool, mit dem Sie die Datenbank anzeigen, nicht mit den persischen Zeichen umgehen kann? Ich würde versuchen, 'INSERT INTO RESUME (resumeDescription) VALUEs ("ییم") auszuführen;' manuell in der Datenbank. Wenn du noch '?' angezeigt, dann ist Ihr Tool zum Anzeigen der Datenbank das Problem. Wenn das Zeichen jedoch korrekt angezeigt wird, haben wir das Problem in Hibernate isoliert. – HeavyE

Antwort

0

Versuchen Sie, die folgende Verbindung URL:

jdbc:mysql://localhost:3306/myDb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8 

Dies wird den Fahrer zwingen, UTF-8 zu verwenden.

+0

Dies führt zu einem Fehler beim Erstellen des Projekts: 'Der Verweis auf die Entität" useUnicode "muss mit dem ';' delimiter.' – TTS

+0

Übrigens habe ich versucht, die Lösung, die dieser Fehler sagt, aber es funktioniert nicht :( – TTS

+0

Könnten Sie bitte versuchen, Ihre Abfrage für die Datenbankänderung zu ändern? 'DROP DATENBANK IF EXISTS myDb; CREATE DATABASE myDb CHARACTER SET 'utf8'; ' – reallol

Verwandte Themen