Temat: Mysql i UTF8
Nie miałem czasu na to ale nadeszła pora aby wrócić do tematu.
Nie nie jestem pewien ze baza jest w latin1 a nawet chyba jestem pewien, że nie jest.
Jak zatem można sprawdzić w jakim jest kodowaniu?
Z tego co widzę w my.cnf
[mysqld]
basedir=C:/Program Files/WebServ2/mysql
#bind-address=
datadir=C:/Program Files/WebServ2/mysql/data
language=C:/Program Files/WebServ2/mysql/share/polish
#slow query log#=
tmpdir=C:/Program Files/WebServ2/temp
port=3306
#set-variable=key_buffer=16M
character-set-server=latin2
default-character-set=latin2
To baza jest w latin2, nie ma sekcji [dump]
Gdy próbuję ją przekonwertować z latin2 na utf8
iconv -f latin2 -t UTF-8 dump.sql > dump_utf8.sql
dostaję jako rezultat coś takiego:
-- MySQL dump 10.11
--
-- Host: localhost Database: patomorfologia
-- ------------------------------------------------------
-- Server version 5.0.45-community-nt
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES UTF8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `badania`
--
DROP TABLE IF EXISTS `badania`;
CREATE TABLE `badania` (
`id` int(11) NOT NULL auto_increment,
`nazwa_badania` varchar(100) NOT NULL default '',
`cena` double NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `badania`
--
LOCK TABLES `badania` WRITE;
/*!40000 ALTER TABLE `badania` DISABLE KEYS */;
INSERT INTO `badania` VALUES (1,'szczoteczki',0),(2,'PÂłyny z jam ciaÂła',0),(3,'Cytologia moczu',0),(4,'Badanie sekcyjne',0),(5,'PCI torbieli',0),(6,'PCI patolog',0),(7,'Cyt. ginekologiczna',0),(8,'cyt. plwociny',0),(9,'PopÂłuczyny',0),(10,'Histopatologiczne',0),(11,'ĹrĂłdoperacyjne',0),(12,'Immunohistochemia',0),(13,'receptor estrogen.',0),(14,'PCI guza',0);
/*!40000 ALTER TABLE `badania` ENABLE KEYS */;
UNLOCK TABLES;
przed konwersją po dumpie wygląda tak:
DROP TABLE IF EXISTS `badania`;
CREATE TABLE `badania` (
`id` int(11) NOT NULL auto_increment,
`nazwa_badania` varchar(100) NOT NULL default '',
`cena` double NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `badania`
--
LOCK TABLES `badania` WRITE;
/*!40000 ALTER TABLE `badania` DISABLE KEYS */;
INSERT INTO `badania` VALUES (1,'szczoteczki',0),(2,'P³yny z jam cia³a',0),(3,'Cytologia moczu',0),(4,'Badanie sekcyjne',0),(5,'PCI torbieli',0),(6,'PCI patolog',0),(7,'Cyt. ginekologiczna',0),(8,'cyt. plwociny',0),(9,'Pop³uczyny',0),(10,'Histopatologiczne',0),(11,'Œródoperacyjne',0),(12,'Immunohistochemia',0),(13,'receptor estrogen.',0),(14,'PCI guza',0);
/*!40000 ALTER TABLE `badania` ENABLE KEYS */;
UNLOCK TABLES;
przy dumpowaniu dałem --defaul-character-set=UTF8
Nie wiem czy to może mieć jakiś wpływ ale pliki oglądam pod linuxem przy użyciu gedit.
pozdr.
JN
Sebastian Zaborowski:
Jakub Nykiel:
Tak w dużym skrócie zrobiłem tak:
zdumpowałem bazę z jednego serwera, niestety otrzymałem plik w którym nie było polskich znaków, ale nie za bardzo mogłem dojść do tego jakie to było kodowanie bo różne konwersje przy użyciu iconv nie dawały poprawnych rezultatów. W pliku było niby latin1.
Zakładam, że jesteś pewien iż baza.sql jest w latin1. Jeśli nie jesteś to sprawdź to i sprawdź tez jakim kodowaniem posługujesz się robiąc dumpa - my.ini sekcja [dump]. Możesz zapisywać bazę kodowaną w XXX w pliku kodowanym YYYY - stąd krzaki.
iconv -f latin1 -t UTF8 < baza.sql > bazautf8.sqlJakub Nykiel edytował(a) ten post dnia 09.11.12 o godzinie 13:26