Autor
|
Tema: [Pregunta]: Detectar acentos en consulta (Leído 8,017 veces)
|
Leguim
Desconectado
Mensajes: 720
|
¿Algo así? Ya se ya se, soy un desastre... function Conexion($user, $pass) { try { $con = new PDO('mysql:host=localhost;dbname=datos', $user, $pass); echo $con->query('SELECT @@character_set_client'); return $con; } catch(PDOException $e) { return $e->getMessage(); } }
|
|
|
En línea
|
|
|
|
EdePC
|
- Me he descargado una versión viejita de MySQL 5.6.35, y todo funciona correctamente también, jeje no logro replicar tu problema XD. -- MySQL dump 10.13 Distrib 5.6.35, for Win32 (AMD64) -- -- Host: localhost Database: pers -- ------------------------------------------------------ -- Server version 5.6.35
/*!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 `persons` --
DROP TABLE IF EXISTS `persons`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `persons` ( `id_person` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `surname` varchar(20) DEFAULT NULL, PRIMARY KEY (`id_person`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; - Por cierto, el dump lo hago ejecutando: D:\SFT\MySQL_5\mysql\bin>mysqldump -u root -p > dump_pers.txt
----------- - Por cierto, para especificar o "setear" el CharSet UTF-8 con PDO lo hago con $con->exec("SET CHARACTER SET utf8"); así: <form action="#" method="post"> <input type="text" name="busqueda" autocomplete="off"> <input type="submit" value="Buscar"> </form>
<?php
$busqueda = isset($_POST['busqueda']) ? $_POST['busqueda'] : '';
$con = new PDO("mysql:host=127.0.0.1;dbname=pers", "root", "jameslafleur"); $con->exec("SET CHARACTER SET utf8"); $sql = "SELECT name, surname FROM persons WHERE CONCAT(name, ' ', surname) LIKE '%$busqueda%'"; foreach ( $con->query($sql) as $row ) { echo $row['name'] . ' ' . $row['surname'] . '<br>'; }
// $sql = "INSERT INTO persons VALUES ( NULL, 'Salomé', 'García' )"; // $con->query($sql);
?>
|
|
« Última modificación: 27 Agosto 2019, 03:34 am por EdePC »
|
En línea
|
|
|
|
Leguim
Desconectado
Mensajes: 720
|
- Me he descargado una versión viejita de MySQL 5.6.35, y todo funciona correctamente también, jeje no logro replicar tu problema XD.
- Por cierto, el dump lo hago ejecutando:
Woao te agradezco mucho el gesto! eso donde lo ejecuto en la consola de phpmyadmin? EDIT: me di cuenta que eso lo ejecutas en una consola jeje, cual es mysql.exe?
|
|
« Última modificación: 27 Agosto 2019, 03:22 am por MiguelCanellas »
|
En línea
|
|
|
|
EdePC
|
- Revisa mi mensaje anterior que lo he actualizado (lo del PDO charset utf-8). - Dependiendo de donde hayas instalado MySQL, tendrás que buscar los binarios del mysql. Lo más sencillo es abrir el Administrador de Tareas, buscar mysqld.exe (mysql daemon) este es el binario del servidor mysql en sí, pues a este le das click derecho > abrir ubicación de archivo, listo ahí debes tener a mysqldump.exe. -- Ya luego abres una CMD y arrastras ese mysqldump.exe a tu consola, en mi caso: c:\Users\EdSon\Desktop>D:\SFT\MySQL_5\mysql\bin\mysqldump.exe -u root -p pers > pers_dump.txt Enter password: ************ -- Y como estoy en el Desktop (Escritorio) me guarda ahí el fichero pers_dump-txt, -u root es para indicar el usuario, en mi caso root, -p es para que me pida ingresar la contraseña a la base de datos, luego con > pers_dump.txt guardo el fichero resultante.
|
|
|
En línea
|
|
|
|
MinusFour
|
A ver, parece que se tiene que deletrear el código por lo que veo... $mysqli = new mysqli('localhost', 'usuario', 'contraseña', 'basededatos');
Esto es para obtener el charset de la conexión en MySQLi. Esto es para obtener el charset de la conexión en PDO: $db = new PDO('mysql:host=localhost;dbname=basededatos', 'usuario', 'contraseña'); var_dump($db->query('SELECT @@character_set_client')->fetchAll());
Lee muy bien el código. Necesitas especificar, usuario, contraseña y base de datos. Si no usas localhost también tienes que especificar el servidor. Técnicamente también deberías preocuparte por character_set_connection, pero por lo pronto esto debería bastar para darnos una idea.
|
|
« Última modificación: 27 Agosto 2019, 04:33 am por MinusFour »
|
En línea
|
|
|
|
Leguim
Desconectado
Mensajes: 720
|
Ya pude! -- MySQL dump 10.16 Distrib 10 .1 .37 -MariaDB , for Win32 (AMD64 ) -- -- Host: localhost Database: basedatos -- ------------------------------------------------------ -- Server version 10.1.37-MariaDB /*!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 `usuarios` -- DROP TABLE IF EXISTS `usuarios`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `usuarios` ( `id_user` int(50) NOT NULL AUTO_INCREMENT, `name` varchar(25) COLLATE utf8_spanish_ci DEFAULT NULL, `surname` varchar(25) COLLATE utf8_spanish_ci DEFAULT NULL, `email` varchar(200) COLLATE utf8_spanish_ci DEFAULT NULL, `password` varchar(200) COLLATE utf8_spanish_ci DEFAULT NULL, `year_birth` int(2) DEFAULT NULL, `month_birth` int(2) DEFAULT NULL, `day_birth` int(2) DEFAULT NULL, `sex` int(2) DEFAULT NULL, `avatar` varchar(200) COLLATE utf8_spanish_ci DEFAULT NULL, ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `usuarios` -- LOCK TABLES `usuarios` WRITE; /*!40000 ALTER TABLE `usuarios` DISABLE KEYS */; INSERT INTO `usuarios` VALUES (1,'MÃguel','Cañellas','canellasmiguel2000@gmail.com','d123c4898730d77d2672621636b8376822bf7cd5df07f4bc1d0d13em7pr2f221e0223kf7dfd9f7d0847149efa5e4afzcd2a54af4uv8b3776e1c4d7f82be09a10d7',2000,6,4,1,'78180511T20198102052.jpeg'); /*!40000 ALTER TABLE `usuarios` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2019-08-26 23:27:55
pasarón 86 años pero ya pude! jaja el charset me devolvio esto array(1) { [0]=> array(2) { ["@@character_set_client"]=> string (6) "latin1" [0]=> string (6) "latin1" } }
|
|
« Última modificación: 27 Agosto 2019, 04:49 am por MiguelCanellas »
|
En línea
|
|
|
|
MinusFour
|
Nosotros solo vamos a poder ver UTF-8 porque es el encoding que usa el foro. Tendrías que subir el archivo a algún lado o nos puedes dar el dump en hexadecimal (pero no lo hagas). Como dije, la forma más simple de revisar si el archivo está en Windows 1252, es simplemente usar un editor que te permita abrir el archivo usando otros encodings. Sublime es gratis, tiene está función y es super sencillo de usar. Notepad++ también tiene una función similar. O podrías darnos el hexadecimal de los caracteres relevantes. Tampoco es difícil. Si tuviera que adivinar tienes: 0x4d 0xc3 0x83 0xc2 0xad 0x67 0x75 0x65 0x6c Para el string de: MÃguel
|
|
|
En línea
|
|
|
|
Leguim
Desconectado
Mensajes: 720
|
Nosotros solo vamos a poder ver UTF-8 porque es el encoding que usa el foro. Tendrías que subir el archivo a algún lado o nos puedes dar el dump en hexadecimal (pero no lo hagas). Como dije, la forma más simple de revisar si el archivo está en Windows 1252, es simplemente usar un editor que te permita abrir el archivo usando otros encodings. Sublime es gratis, tiene está función y es super sencillo de usar. Notepad++ también tiene una función similar. O podrías darnos el hexadecimal de los caracteres relevantes. Tampoco es difícil. Si tuviera que adivinar tienes: 0x4d 0xc3 0x83 0xc2 0xad 0x67 0x75 0x65 0x6c Para el string de: MÃguelSi yo uso sublime sería cosa de pegar el dump en sublime text y en que parte esta esa funcionalidad de la que hablas? y sobre lo del charset que me devolvió "latin_1" esto podría ser lo que me de el fallo de no reconocer acentos?
|
|
|
En línea
|
|
|
|
MinusFour
|
Si yo uso sublime sería cosa de pegar el dump en sublime text y en que parte esta esa funcionalidad de la que hablas? y sobre lo del charset que me devolvió "latin_1" esto podría ser lo que me de el fallo de no reconocer acentos?
No se si haya menus en español, yo tengo mi sublime en inglés. Pero primero abro el archivo con sublime y después voy a File->Reopen With Encoding->Windows 1252. Yo creo que el archivo si está en UTF-8.... Lo del charset, si es muy probable que este afectando tu información. Porque la información viaja codeada en ISO-8859-1 (Mysql no usa Windows 1252??), lo que significa que tu cliente malforma el texto UTF-8. Para PDO puedes hacer: $db = new PDO('mysql:host=localhost;dbname=basededatos;charset=utf8', 'usuario', 'contraseña');
Y yo probaría de nuevo con el query para estar seguro.
|
|
|
En línea
|
|
|
|
Leguim
Desconectado
Mensajes: 720
|
No se si haya menus en español, yo tengo mi sublime en inglés. Pero primero abro el archivo con sublime y después voy a File->Reopen With Encoding->Windows 1252. Yo creo que el archivo si está en UTF-8.... Lo del charset, si es muy probable que este afectando tu información. Porque la información viaja codeada en ISO-8859-1 (Mysql no usa Windows 1252??), lo que significa que tu cliente malforma el texto UTF-8. Para PDO puedes hacer: $db = new PDO('mysql:host=localhost;dbname=basededatos;charset=utf8', 'usuario', 'contraseña');
Y yo probaría de nuevo con el query para estar seguro. Hice eso pero el resultado ahora aparece así en la pantalla, lo imprime así: MÃguel Cañellas de igual forma sigue sin funcionar ahora aunque escriba "mí" no lo encuentra EDIT: el charset igualmente ahora si sale en utf8
|
|
« Última modificación: 27 Agosto 2019, 05:21 am por MiguelCanellas »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Software para detectar fallas de hardware en movil [Consulta ]
Dispositivos Móviles (PDA's, Smartphones, Tablets)
|
Megan
|
0
|
13,937
|
12 Enero 2012, 20:37 pm
por Megan
|
|
|
Pregunta bastante sencilla: Acentos y comillas en Batch
Scripting
|
z3nth10n
|
9
|
7,261
|
24 Mayo 2012, 21:02 pm
por z3nth10n
|
|
|
[Pregunta]: Detectar un click sobre un elemento
Desarrollo Web
|
Leguim
|
7
|
2,767
|
31 Enero 2019, 05:31 am
por Leguim
|
|
|
[Pregunta]: Detectar cuando se presiona determinada tecla
Desarrollo Web
|
Leguim
|
4
|
2,363
|
17 Marzo 2019, 04:03 am
por #!drvy
|
|
|
[Pregunta]: ¿Como puedo buscar un texto sin importar sus acentos?
Desarrollo Web
|
Leguim
|
2
|
2,033
|
18 Julio 2019, 09:43 am
por #!drvy
|
|