Jump to content
php.lv forumi

php, MySQL un UTF-8


aika

Recommended Posts

Ir pienācis man laiks migrēt uz reālu hosteri un esmu konkrēti ieberzies ar kodējumiem.

Lieki teikt ka vecajā vietā viss ok.

Noeksportēju savus datus, pārnesu uz hosteri un sākās ?? visur kur mīkstiešņācošie nāk no SQL .

 

Hosterim MySQL charset: UTF-8 Unicode (utf8)

PHP codings - UTF8

 

Vecajā db eksportā figurē: ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

un texts izskatās šādi: mÄ“neÅ¡i

php agriež m?�ne??i

 

Mēģināju tupa exp. failā pārsaukt latin1 par UFT8

tas nenostrādāja

 

ja exp. failā mainu mÄ“neÅ¡i uz mēneši - tad phpMyadmin tabulā redzu mēneši, bet PHP atgriež m?ne?i

 

ja caur php iebaroju mēneši - tad php atgriež mēneši, bet Mysql tabulā stāv: mД“neЕЎi

es vnk hu..eju

 

Ja ir kādam ideja kā apčakarēt kodējumus - lūdz izsakieties.

Mainīt MySQL charset es acīmredzot nevaru, bet laipni uzklausīšu kā pareizi uzsetapot charus MySQLam un tabulām!

 

 

Vēl dati:

phpMyadmins taisot sql updeitu vienmēr raksta: WHERE CONVERT USING utf8

tabulās avisur collation stāv: utf8_general_ci

Edited by aika
Link to comment
Share on other sites

tabulaam tev vajag noraadiit latin1_general_ci un importeejot failu ar phpmyadmin noraadi faila kodeejumu.

2 variants: vecajaa db uztaisiit BACKUP un meeginaat tur paarkonverteet no latin uz utf8 un tad eksporteet

Link to comment
Share on other sites

tabulaam tev vajag noraadiit latin1_general_ci un importeejot failu ar phpmyadmin noraadi faila kodeejumu.

2 variants: vecajaa db uztaisiit BACKUP un meeginaat tur paarkonverteet no latin uz utf8 un tad eksporteet

 

tabulām kodējums nāk līdzi exp. failā! Un tas neko nedod. Importējot arī neviens no kode'juma variantiem nepalīdz.

 

Šo te es experimentēju pēc viena gūgles ieteikuma: tjipa ka būtība ir sekojoša: UFT texts exp./ bekapa brīdī tiek konvertēts vēlreiz par UTF, jo tabula it latin kodā. UN šis dubultais kodējums taisnā ceļā dodad importā. Mēģināju bekapu exportēt ar kode'juma norādi latin1. tad bekapā vnk. pārsaukt latin1 par UTF, kā bija ieteikts. Nope - nepalīdz!

Link to comment
Share on other sites

nu nee,

tev pie mysqldump ir iespeeja tikt uz bck servera?

 

kad importee ieksh mysql tev ir taada opcija: Character set of the file:

 

nu jā - es vaaru taisīt dampu! To jau arī darīju, norādot ka kodējums ir latin lai damps netaisītu konvertāciju! Tāpat tūtē :(

Link to comment
Share on other sites

a ja tu dumpo uz utf8 ?

mysql ir uz win vai *nix ?

 

bet kas tev liedz pie hostera savai db likt citu kodeejumu ?

vai tu gribi paariet uz utf8?

 

viņs jau defaultā dampo uz utf.

vecais ir uz win, jaunais visdrīzākais uz nixa

 

neredzu iespēju mainīt pie hostera kodējumu, turklāt uz vecā MySQL ir tieši tāds pats kodējums

 

 

 

___________

pamanīju ka vecajām tabulām izkārtojums bija latin1. Pie tabulu operācijām uzliku ka utf8. Nekas nemainījās ne vecajā galā, ne exportējuot uz jauno.

Vnk turpinu hu..etj.

Link to comment
Share on other sites

ja pareizi saprotu, tad tev tie dati bija iekš windows-1257 kodējuma? ja tā, tad dumpam kā pirmo rindiņu ieliec 'SET NAMES cp1257'.

 

!!! /*!40101 SET NAMES windows-1257 */ :)

MySQL teica:

#1115 - Unknown character set: 'windows'

:) pareizi ir cp1257

 

BET kapēc tu domā ka datiem ir windows-1257, ja šāds kodējums setingos vispar nekur neparādās!?

jebkurā gadījumā izmegināju arī šo gan vienā galā, gan otrā :(

 

PS.

dampa galvā stāv:

-- MySQL dump 10.11

--

-- Host: localhost Database: apache

-- ------------------------------------------------------

-- 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 */;

Link to comment
Share on other sites

un visvairāk mani besī šis: ja caur php iebaroju mēneši - tad php atgriež mēneši, bet Mysql tabulā stāv: mД“neЕЎi

 

 

BTW ir jautājums - kā var tikt klāt šim te Д“ . Godīgi sakot vispār nav skaidrs transports kā dati tiek nodoti no tabulas php parserim. Kurā brīdī notiek kodēšanās. Kas utf divus simbolus pārtaisa par vienu un otrādāk?

Link to comment
Share on other sites

MyAdmin tev tur var rādīt visdīvainākos kodējumus, kad skaties tabulu saturu. tu skaties, kas tev pašā skriptā nāk ārā. Iebaro dumpu papriekš tanī pat kodējumā, kāds bija vecajai lapai ar set names palīdzību. un tad skaties, lai skriptā konekcijai būtu tas pats kodējums, nu un headeri u.t.t.

Link to comment
Share on other sites

Es tak arī rakstīju 'cp1257' ;)

 

Nu, ja tev tie dati būtu utf8, tad problēmām nevajadzētu būt. Bez tam, pieredze rāda, ka iekš latin1 tauta parasti liek iekšā 1257 ;)

 

Tad kādā kodējumā lapiņa ir? vecā, domāju.

 

kā var uzzināt kodējumu? Visa lapa (php kods) ir UTF8. UTFs ir salikts visur kur vien varu salikt! Vēl lieta kuru nesaprotu - mainot tabulas lauka izkārtojumus nekas nemainās!!!

Sākotnēji tabulās kā izkārtojums visur figurēja latin1. Taču dati, php faili - viss ir UTF. Tur aukstāk taču ir dampa headeris!

Link to comment
Share on other sites

×
×
  • Create New...